# 添加常用的公共函数
import configparser
import os
from selenium import webdriver
from app_ui.lib.common.app_ui_log import normal_log, error_log
import time
from selenium.webdriver.common.by import By
import yaml


# 获取项目的根路径
def get_path():
    return os.path.dirname(os.path.dirname(os.path.dirname(__file__)))


# 读取配置文件信息，获得环境地址
def get_url(environment, key):
    '''

    :param environment:  对应的环境
    :param key:  环境下的配置
    :return:
    '''
    conf = configparser.ConfigParser()
    conf.read(get_path() + '/Config/environment.ini')
    return conf.get(environment.upper(), key)


# 读取mysql配置信息
def get_mysql_config(environment: str):
    '''

    :param environment:  环境信息
    :return: 配置字典
    '''
    # 定义配置字典
    config_dict = {
        'host': None,
        'port': None,
        'user': None,
        'passwd': None,
        'charset': None,
        'database': None,
    }
    # 读取配置文件
    conf = configparser.ConfigParser()
    conf.read(get_path() + '/Config/mysql_config.ini')
    # 给配置字典赋值
    for key in config_dict.keys():
        if key == 'port':
            config_dict[key] = int(conf.get(environment.upper(), key))
        else:
            config_dict[key] = conf.get(environment.upper(), key)
    return config_dict


# 获取打开APP的配置信息
def open_app_params(app: str) -> dict:
    '''
    根据浏览器类型打开浏览器
    :param app:  选择要打开的app
    :param browser_type:
    :return:  返回打开app的字典参数
    '''
    # 定义参数字典
    desired_caps = {
        # app系统名称
        'platformName': None,
        # 系统版本
        'platformVersion': None,
        # 设备名称
        'deviceName': None,
        # 是否重置
        'noReset': None,
        # APP的包名
        'appPackage': None,
        # 打开的页面名称
        'appActivity': None,
    }
    # 读取配置文件
    conf = configparser.ConfigParser()
    conf.read(get_path() + r'/config/open_app_params.ini')
    # 初始化字典并返回
    for key in desired_caps.keys():
        if desired_caps[key] is None:
            if key == 'noReset':
                if conf.get(app.upper(), key) == 'True':
                    desired_caps[key] = True
                else:
                    desired_caps[key] = False
            else:
                desired_caps[key] = conf.get(app.upper(), key)
    return desired_caps


# 定制化时间格式
def get_time(format_time: str, number: int = None):
    '''
    返回特定格式的时间字符串
    :param format_time:  想要的时间格式
    :param number:  与当前时间的差值
    :return:
    '''
    try:
        if number is not None:
            time_num = time.time() + (number * 24 * 60 * 60)
            # 将时间转化为格式化时间
            return time.strftime(format_time, time.localtime(time_num))
        else:
            time_num = time.time()
            # 将时间转化为格式化时间
            return time.strftime(format_time, time.localtime(time_num))
    except Exception as e:
        error_log().debug('>>>>>时间格式错误{}'.format(format_time))
        raise e


def element_operation(obj, data):
    '''
    浏览器操作
    :param obj:
    :param data:
    :return:
    '''
    for i in range(len(data)):
        # 是否需要为元素传值
        # 调用强制等待的方法
        if data[i]['method'] == 'wait':
            getattr(obj, data[i]['method'])(data[i]['second'])
        # 刷新浏览器
        elif data[i]['method'] == 'refresh':
            getattr(obj, data[i]['method'])()
        # 调用其他的方法
        elif 'value' in data[i]:
            # 选择方法
            getattr(obj, data[i]['method'])(args=data[i]['args'],
                                            text=data[i]['value'],
                                            context=data[i]['context'])
        else:
            getattr(obj, data[i]['method'])(args=data[i]['args'],
                                            context=data[i]['context'])


# 打开yaml文件，获取yaml当中的数据
def get_data_by_yaml(path):
    data = None
    with open(path, mode='rt', encoding='utf-8') as f1:
        data = yaml.load(f1, yaml.FullLoader, )
    return data


if __name__ == '__main__':
    print(get_path())
